package com.insideClass.AnonymityInsideClass;


import java.util.List;

interface SuperPower{

}
interface XRayVision extends SuperPower{
    /**
     * seeThroughWalls
     */
    void seeThroughWalls();
}
interface SuperHearing extends SuperPower{
    /**
     * hearSubtleNoises
     *
     */
    void hearSubtleNoises();
}
interface SuperSmell extends SuperPower{
    /**
     * trackBySmell
     *
     */
    void trackBySmell();
}
class SuperHero<POWER extends SuperPower>{
    POWER power;
    SuperHero(POWER power){
        this.power=power;
    }
    POWER getPower(){
        return power;
    }
}
class SuperSleuth<POWER extends XRayVision> extends SuperHero<POWER>{

    SuperSleuth(POWER power) {
        super(power);
    }
    void see(){
        power.seeThroughWalls();
    }
}
class CanineHero
        <POWER extends SuperHearing & SuperSmell>extends SuperHero<POWER>{
    CanineHero(POWER power) {
        super(power);
    }
    void hear(){
        power.hearSubtleNoises();
    }
    void smell(){
        power.trackBySmell();
    }
}
class SuperHearSmell implements SuperHearing,SuperSmell{

    @Override
    public void hearSubtleNoises() {

    }

    @Override
    public void trackBySmell() {

    }
}
class DogBoy extends CanineHero<SuperHearSmell>{

    DogBoy() {
        super(new SuperHearSmell());
    }
}
/**
 * @author 13699
 */
public class EpicBattle {
    static <POWER extends SuperHearing>
    void useSuperHearing(SuperHero<POWER> hero){
        hero.getPower().hearSubtleNoises();
    }
    /**
     * &等同and
     * <POWER extends SuperHearing & SuperSmell>
     */

    static <POWER extends SuperHearing & SuperSmell>
    void superFind(SuperHero<POWER> hero){
        hero.getPower().hearSubtleNoises();
        hero.getPower().trackBySmell();
    }

    public static void main(String[] args) {
        DogBoy dogBoy=new DogBoy();
        useSuperHearing(dogBoy);
        superFind(dogBoy);
        List<? extends SuperHearing> audioBoys;
    }
}
